package com.atguigu.gmall.pms.api;

import com.atguigu.gmall.common.bean.PageParamVo;
import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.pms.entity.*;
import com.atguigu.gmall.pms.vo.ItemGroupVo;
import com.atguigu.gmall.pms.vo.SaleAttrValueVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Aupt
 * @create 2022-05-24-17:36
 */
public interface GmallPmsApi {

    @PostMapping("pms/spu/page")
    ResponseVo<List<SpuEntity>> querySpusByPage(@RequestBody PageParamVo pageParamVo);

    @GetMapping("pms/sku/spu/{spuId}")
    ResponseVo<List<SkuEntity>> querySkuEntitiesBySpuId(@PathVariable("spuId") Long spuId);

    @GetMapping("pms/category/{id}")
    ResponseVo<CategoryEntity> queryCategoryById(@PathVariable("id") Long id);

    @GetMapping("pms/category/parent/{parentId}")
    ResponseVo<List<CategoryEntity>> queryCategoryByParentId(@PathVariable("parentId") Long parentId);

    @GetMapping("pms/brand/{id}")
    ResponseVo<BrandEntity> queryBrandById(@PathVariable("id") Long id);

    @GetMapping("pms/spuattrvalue/spu/{cid}")
    ResponseVo<List<SpuAttrValueEntity>> querySearchAttrValueByCidAndSpuId(
            @PathVariable("cid") Long categoryId,
            @RequestParam("spuId") Long spuId
    );

    @GetMapping("pms/skuattrvalue/sku/{cid}")
    ResponseVo<List<SkuAttrValueEntity>> querySearchAttrValueByCidAndSkuId(
            @PathVariable("cid") Long categoryId,
            @RequestParam("skuId") Long skuId
    );

    @GetMapping("pms/category/subs/{pid}")
    ResponseVo<List<CategoryEntity>> queryCategoriesWithSub(@PathVariable("pid") Long pid);


    /**
     * 根据id查询sku信息
     *
     * @param id
     * @return
     */
    @GetMapping("pms/sku/{id}")
    ResponseVo<SkuEntity> querySkuById(@PathVariable("id") Long id);

    /**
     * 根据id查询spu信息
     *
     * @param id
     * @return
     */
    @GetMapping("pms/spu/{id}")
    ResponseVo<SpuEntity> querySpuById(@PathVariable("id") Long id);

    /**
     * 根据id查询spu的描述信息
     *
     * @param spuId
     * @return
     */
    @GetMapping("pms/spudesc/{spuId}")
    ResponseVo<SpuDescEntity> querySpuDescById(@PathVariable("spuId") Long spuId);


    /**
     * 根据三级分类id查询一二三级分类
     *
     * @param cid3
     * @return
     */
    @GetMapping("pms/category/all/{cid3}")
    ResponseVo<List<CategoryEntity>> queryCategoriesByCid3(@PathVariable("cid3") Long cid3);


    /**
     * 根据skuId查询sku的图片
     *
     * @param skuId
     * @return
     */
    @GetMapping("pms/skuimages/sku/{skuId}")
    ResponseVo<List<SkuImagesEntity>> queryImagesBySkuId(@PathVariable("skuId") Long skuId);


    /**
     * 根据spuId查询spu下的所有销售属性
     *
     * @param spuId
     * @return
     */
    @GetMapping("pms/skuattrvalue/spu/{spuId}")
    ResponseVo<List<SaleAttrValueVo>> querySkuAttrValuesBySpuId(@PathVariable("spuId") Long spuId);


    @GetMapping("pms/skuattrvalue/spu/sku/{spuId}")
    ResponseVo<String> querySkusJsonBySpuId(@PathVariable("spuId") Long spuId);


    /**
     * 当前sku的销售属性
     *
     * @param skuId
     * @return
     */
    @GetMapping("pms/skuattrvalue/sku/item/{skuId}")
    ResponseVo<List<SkuAttrValueEntity>> querySkuAttrValuesBySkuId(@PathVariable("skuId") Long skuId);


    /**
     * 查询组及组下参数和值
     *
     * @param spuId
     * @param skuId
     * @param cid
     * @return
     */
    @GetMapping("pms/attrgroup/withattrvalues")
    ResponseVo<List<ItemGroupVo>> queryGroupsBySpuIdAndCid(
            @RequestParam("spuId") Long spuId,
            @RequestParam("skuId") Long skuId,
            @RequestParam("cid") Long cid
    );

}
